var FileSystemManager = null;

export default class DownloadUtil {
        /**
         * 
         * @param {*} loadUrl 下载地址
         * @param {*} saveFileName 需要保存的文件名字
         * @param {*} callback 下载中的数据回调
         * @param {*} isNeedUnzip 是否需要解压
         */
        static downloadFile (loadUrl, saveFileName, callback,succBack, isNeedUnzip) {
            if (cc.sys.platform != cc.sys.WECHAT_GAME) {
                return;
            }

            if (FileSystemManager==null){
                FileSystemManager = tt.getFileSystemManager();
            }
            var self = this;
            var downloadFile = tt.downloadFile({
                url: loadUrl,
                success (res) {
                    if (res.statusCode === 200) {
                        self.saveFile(res.tempFilePath, saveFileName, succBack, isNeedUnzip);//下载成功之后要保存到本地
                    }
                },
                fail (res) {
                    Log(`downloadFile调用失败`);
                }
            });

            downloadFile.onProgressUpdate( (res)=>{
                let progress = res.progress;    //下载进度
                let totalBytesWritten = res.totalBytesWritten;  //已经下载的数据长度，单位byte
                let totalBytesExpectedToWrite = res.totalBytesExpectedToWrite;  //预期需要下载的数据总长度，单位byte
                if (callback) {
                    let obj = {
                        '进度' : progress,
                        '字长' : Math.floor(totalBytesWritten/1024) + '/' + Math.floor(totalBytesExpectedToWrite/1024)
                    }
                    callback(obj);
                }
                // Log(" ---------------------progress: " + JSON.stringify(progress));
            });
        }
        /**
         * 判断文件/目录是否存在
         * @param {string} filePath  要判断是否存在的文件/目录路径
         * @param {function} callback  要判断是否存在的文件/目录路径
         */
        static access(filePath,callback?){
            if (cc.sys.platform != cc.sys.WECHAT_GAME) {
                return;
            }
            if (FileSystemManager==null){
                Log('获取抖音文件管理器')
                FileSystemManager = tt.getFileSystemManager();
            }
            FileSystemManager.access({
                path: filePath,
                success (res) {
                    Log(filePath,'存在')
                    if (callback) {
                        callback(true, filePath);
                    }
                },
                fail (res) {
                    Log(filePath,'不存在')
                    if (callback) {
                        callback(false);
                    }
                }
            });
        }
        /**
         * 保存临时文件到本地。此接口会移动临时文件，因此调用成功后，tempFilePath 将不可用。本地文件存储上限：50M。
         * @param {*} tempPath 
         * @param {*} savePath 
         */
        static saveFile(tempPath,savePath,callback,isNeedUnzip){
            if (cc.sys.platform != cc.sys.WECHAT_GAME || FileSystemManager == null) {
                return;
            }
            let self = this;
            FileSystemManager.saveFile({
                tempFilePath: tempPath,
                filePath: tt.env.USER_DATA_PATH + '/' + savePath ,//tt.env.USER_DATA_PATH+'/Levle1.zip',
                success (res) {
                    Log('保存成功:',savePath);
                    let savedFilePath = res.savedFilePath;//存储后的文件路径
                    if (isNeedUnzip) {
                        self.unzip(savedFilePath, callback);
                    }
                    else{
                        if (callback) {
                            callback(savedFilePath,'保存完毕');
                        }
                    }
                },
                fail (res) {
                    Log('保存失败:',savePath);
                }
            });
        }
        /**
         * 删除文件
         * @param {*} filePath 删除的路径
         */
        static unlink(filePath) {
            if (cc.sys.platform != cc.sys.WECHAT_GAME || FileSystemManager == null) {
                return;
            }
            Log('删除文件:',filePath);
            FileSystemManager.unlink({
                filePath: filePath,
                success (res) {
                    Log("删除文件成功：" + JSON.stringify(res));
                },
                fail (res) {
                    Log("删除文件失败:" + JSON.stringify(res));
                }
            });
        }
        //解压文件
        static unzip (zipFilePath, callback) {
            if (cc.sys.platform != cc.sys.WECHAT_GAME || FileSystemManager == null) {
                return;
            }
            var self = this;
            self.access(zipFilePath);
            Log('解压文件:',zipFilePath)
            FileSystemManager.unzip({
                zipFilePath: zipFilePath,
                targetPath: tt.env.USER_DATA_PATH,
                success(res) {
                    Log('解压成功:',res)
                    if (callback) {
                        callback();
                    }
                    self.unlink(zipFilePath);
                },
                fail (res) {
                    Log('解压失败:',res)

                },
            });
        }
}

